// 完整的script.js文件，需要看到变量定义部分
// 全局变量
let ticking=!1,scrollY=0,elements={},observerOptions={root:null,rootMargin:'0px',threshold:.1},animationObserver=null,videoPreloadPool={}; // 视频预加载池

// 页面加载完成后初始化
window.addEventListener('DOMContentLoaded', async function() {
  // 初始化元素引用
  elements.navbar=document.getElementById('navbar');
  elements.menuBtn=document.getElementById('menuBtn');
  elements.mobileMenu=document.getElementById('mobileMenu');
  elements.backToTop=document.getElementById('backToTop');
  elements.imagePreview=document.getElementById('imagePreview');
  elements.previewImageEl=document.getElementById('previewImage');
  elements.videoContainer=document.querySelector('.video-container');
  elements.menuItems=document.querySelectorAll('.menu-item[data-close="true"]');
  elements.videoModal=document.getElementById('videoModal');
  elements.modalVideo=document.getElementById('modalVideo');
  // 添加logo元素引用
  elements.logo=document.querySelector('.logo');
  
  // 初始化动画观察器
  animationObserver=new IntersectionObserver(e=>{
    e.forEach(e=>{
      e.isIntersecting&&(e.target.classList.add('visible'),e.target.classList.contains('ai-card')&&animateCard(e.target))
    })
  },observerOptions);
  
  // 初始化事件监听器
  initEventListeners();
  
  // 加载数据并预加载主要视频
  await loadDataAndPreloadVideos();
});

// 初始化事件监听器
function initEventListeners() {
  window.addEventListener('scroll',handleScroll,{passive:!0});
  elements.menuBtn.addEventListener('click',function(){
    requestAnimationFrame(()=>{
      this.classList.toggle('active');
      elements.mobileMenu.classList.toggle('active');
      document.body.style.overflow=elements.mobileMenu.classList.contains('active')?'hidden':'auto';
      
      const menuIcon = document.querySelector('.menu-icon');
      // 修改menu-icon的src属性
      menuIcon.src=elements.mobileMenu.classList.contains('active')?'./static/icon/close.png':'./static/icon/list-icon.png';
      // 添加或移除close-icon类
      if(elements.mobileMenu.classList.contains('active')){
        menuIcon.classList.add('close-icon');
      } else {
        menuIcon.classList.remove('close-icon');
      }
    })
  });
  // 为logo添加点击事件，实现滚动到顶部功能
  elements.logo.addEventListener('click',function(){
    window.scrollTo({top:0,behavior:'smooth'});
  });
  elements.menuItems.forEach(e=>{
    e.addEventListener('click',function(){
      elements.menuBtn.classList.remove('active');
      elements.mobileMenu.classList.remove('active');
      document.body.style.overflow='auto';
      // 关闭菜单时重置menu-icon的src属性并移除close-icon类
      const menuIcon = document.querySelector('.menu-icon');
      menuIcon.src='./static/icon/list-icon.png';
      menuIcon.classList.remove('close-icon');
    })
  });
  document.querySelectorAll('a[href^="#"]').forEach(e=>{
    e.addEventListener('click',function(e){
      e.preventDefault();
      const t=this.getAttribute('href');
      if('#'===t)return void window.scrollTo({top:0,behavior:'smooth'});
      const n=document.querySelector(t);
      n&&window.scrollTo({top:n.offsetTop-80,behavior:'smooth'});
    })
  });
  elements.backToTop.addEventListener('click',function(){
    window.scrollTo({top:0,behavior:'smooth'});
  });
  elements.imagePreview.addEventListener('click',function(e){
    e.target===this&&closePreview();
  });
  elements.videoContainer.addEventListener('click', async function() {
    try {
      const config = await API.getConfig();
      playVideo(config.hero.video);
    } catch (e) {
      console.error('获取视频地址失败:', e);
    }
  });
  elements.videoModal.addEventListener('click', function(e) {
    // 只有点击到视频模态框的背景区域（非视频内容）时才关闭
    if (e.target === this) {
      closeVideoModal();
    }
  });
}

// 加载数据并预加载视频
async function loadDataAndPreloadVideos() {
  try {
    const config = await API.getConfig();
    
    // 预加载主要视频（hero视频）
    if (config.hero?.video) {
      preloadVideo(config.hero.video);
    }
    
    // 加载职位数据
    await loadData(config);
    
    // 设置页面加载完成事件
    window.addEventListener('load',function(){
      document.querySelectorAll('.ai-card, .certificate-row').forEach(e=>{
        animationObserver.observe(e);
      });
      handleScroll();
      document.querySelectorAll('.ai-card').forEach((e,t)=>{
        requestAnimationFrame(()=>{
          setTimeout(()=>{
            requestAnimationFrame(()=>{
              e.style.opacity='1';
              e.style.transform='translateY(0)';
            });
          },100*t);
        });
      });
    });
  } catch (e) {
    console.error('加载数据失败:', e);
  }
}

// 视频预加载函数
function preloadVideo(videoSrc) {
  // 如果视频已经在预加载池中，直接返回
  if (videoPreloadPool[videoSrc]) {
    return videoPreloadPool[videoSrc];
  }
  
  // 创建一个新的视频对象进行预加载
  const preloadVideo = document.createElement('video');
  preloadVideo.preload = 'metadata'; // 仅预加载元数据，减少带宽使用
  preloadVideo.src = videoSrc;
  
  // 创建一个Promise用于跟踪预加载状态
  const preloadPromise = new Promise((resolve, reject) => {
    preloadVideo.onloadedmetadata = () => {
      console.log(`视频元数据已预加载: ${videoSrc}`);
      resolve(preloadVideo);
    };
    preloadVideo.onerror = (error) => {
      console.error(`视频预加载失败: ${videoSrc}`, error);
      reject(error);
    };
  });
  
  // 将预加载的视频和Promise存储到池中
  videoPreloadPool[videoSrc] = preloadPromise;
  
  return preloadPromise;
}

// 滚动处理函数
function handleScroll() {
  scrollY=window.scrollY;
  if (!ticking) {
    requestAnimationFrame(()=>{
      scrollY>50?elements.navbar.classList.add('scrolled'):elements.navbar.classList.remove('scrolled');
      scrollY>300?elements.backToTop.classList.add('visible'):elements.backToTop.classList.remove('visible');
      ticking=!1;
    });
    ticking=!0;
  }
}

// 卡片动画函数
function animateCard(e){
  requestAnimationFrame(()=>{
    e.style.opacity='1';
    e.style.transform='translateY(0) scale(1)';
    requestAnimationFrame(()=>{
      const t=e.querySelector('.ai-avatar-container');
      const n=e.querySelector('.ai-name');
      const a=e.querySelector('.ai-desc');
      if (t) t.style.opacity='1';
      if (n) {
        n.style.opacity='1';
        n.style.transform='translateY(0)';
      }
      if (a) {
        a.style.opacity='1';
        a.style.transform='translateY(0)';
      }
    });
  });
}

// 图片预览函数
function previewImage(e){
  elements.previewImageEl.src=e;
  elements.imagePreview.classList.add('active');
  document.body.style.overflow='hidden';
}

// 关闭预览函数
function closePreview(){
  elements.imagePreview.classList.remove('active');
  document.body.style.overflow='auto';
}

// 视频播放弹窗功能 - 优化版，利用预加载池
function playVideo(videoSrc) {
  if (!elements.videoModal || !elements.modalVideo) {
    console.error('视频模态框或视频元素不存在');
    return;
  }
  
  // 显示弹窗，先给用户视觉反馈
  elements.videoModal.classList.add('active');
  document.body.style.overflow = 'hidden';
  
  // 检查视频是否已经在预加载池中
  if (videoPreloadPool[videoSrc]) {
    // 如果视频已预加载，直接使用
    videoPreloadPool[videoSrc].then(() => {
      setVideoSource(videoSrc);
      tryToPlayVideo();
    }).catch(() => {
      // 预加载失败，仍尝试设置视频源
      setVideoSource(videoSrc);
      tryToPlayVideo();
    });
  } else {
    // 如果视频未预加载，先进行预加载并立即设置视频源
    preloadVideo(videoSrc);
    setVideoSource(videoSrc);
    tryToPlayVideo();
  }
}

// 设置视频源
function setVideoSource(videoSrc) {
  // 修改视频源设置方式，解决Safari浏览器兼容性问题
  const videoSource = elements.modalVideo.querySelector('source');
  videoSource.src = videoSrc;
  
  // 确保视频元素也设置了src属性，这对Safari很重要
  elements.modalVideo.src = videoSrc;
  
  // 重新加载视频
  elements.modalVideo.load();
}

// 尝试播放视频
function tryToPlayVideo() {
  // 延迟一下再播放，给浏览器一些准备时间
  setTimeout(() => {
    try {
      // 使用Promise处理播放请求
      const playPromise = elements.modalVideo.play();
      
      if (playPromise !== undefined) {
        playPromise.then(() => {
          // 播放成功
          console.log('视频播放成功');
        }).catch(error => {
          // 自动播放被阻止，这在大多数浏览器中是正常的
          console.log('视频自动播放被阻止，等待用户交互:', error);
          // 用户可以点击视频播放器上的播放按钮手动播放
        });
      }
    } catch (e) {
      console.error('视频播放错误:', e);
    }
  }, 100); // 减少延迟时间，提高响应速度
}

// 关闭视频弹窗
function closeVideoModal() {
  if (!elements.videoModal || !elements.modalVideo) return;
  
  // 暂停视频
  elements.modalVideo.pause();
  
  // 重置视频时间
  elements.modalVideo.currentTime = 0;
  
  // 隐藏弹窗
  elements.videoModal.classList.remove('active');
  document.body.style.overflow = 'auto';
  
  // 移除3秒后清除视频源的逻辑，避免视频播放中断
  // 如果需要优化内存使用，可以考虑在页面卸载时清除视频源
}



// 加载职位数据函数
async function loadData(config) {
  try {
    const jobGrid = document.getElementById('jobGrid');
    
    config.jobs.forEach(job => {
      const jobItem = document.createElement('div');
      jobItem.className = 'ai-job-item';
      jobItem.innerHTML = `
        <div class="ai-job-title">
          <img src="./static/icon/ai-title-bg.png" mode="widthFix" class="ai-title-bg">
          <div>${job.title}</div>
        </div>
        <div class="video-placeholder" data-video="${job.video}">
          <img src="./static/icon/video-bg.png" class="job-video" alt="${job.title}">
          <div class="job-title">${job.shortTitle}</div>
          <img src="./static/icon/play.png" class="play-icon" alt="播放">
        </div>
      `;
      jobGrid.appendChild(jobItem);
      
      // 为每个职位视频添加点击事件
      const videoPlaceholder = jobItem.querySelector('.video-placeholder');
      videoPlaceholder.addEventListener('click', function() {
        const videoSrc = this.getAttribute('data-video');
        playVideo(videoSrc);
      });
    });
    
    // 添加职位视频的滚动预加载 - 当用户滚动到接近视频位置时开始预加载
    const videoPreloadObserver = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          const videoSrc = entry.target.getAttribute('data-video');
          if (videoSrc && !videoPreloadPool[videoSrc]) {
            // 设置较低的优先级进行预加载
            setTimeout(() => {
              preloadVideo(videoSrc);
            }, 1000);
          }
          // 一旦预加载开始，就不再观察这个元素
          videoPreloadObserver.unobserve(entry.target);
        }
      });
    }, { rootMargin: '500px 0px' }); // 在元素进入视口前500px就开始预加载
    
    // 观察所有视频占位符
    document.querySelectorAll('.video-placeholder').forEach(placeholder => {
      videoPreloadObserver.observe(placeholder);
    });
    
  } catch (e) {
    console.error('加载数据失败:', e);
  }
}
